JavaScript 的 Set 像是一種特別的陣列,一個 Set 裡面的任一個資料都是獨一無二的,一般陣列裡可以有多個相同的資料,比如[1 , 1, "foo", "foo"]
這樣子,但是在 Set 裡同一筆資料不會出現第二次。
Set 和 Map 有著許多共同的方法。
const set = new Set(["Bulbasaur", "Charmander", "Squirtle", "Pikachu"]);
// or
const set = new Set();
set.add("Bulbasaur");
set.add("Charmander");
set.add("Squirtle");
set.add("Pikachu");
console.log(set);
// Set { "Bulbasaur", "Charmander", "Squirtle", "Pikachu" }
不管是用哪種方法建立,只要有重複的資料,在 Set 裡面都只會記錄成一筆資料。
set.size;
// 4
set.has("Pikachu");
// true
set.has("Ditto");
// false
set.delete("Ditto");
// false
// Set { "Bulbasaur", "Charmander", "Squirtle", "Pikachu" }
set.delete("Pikachu");
// true
// Set { "Bulbasaur", "Charmander", "Squirtle" }
set.clear();
// Set {}
如果要刪除的資料在 Set 裡面沒有的話,得到false
的回傳值,而 Set 不會改變。如果有,該項資料會從 Set 裡刪除。
而clear
則是清空整個 Set。
雖然我們可以用陣列來建立 Set,但是不能像陣列那樣使用 index number 取得項目值,只會得到undefined
。
const arr = ["Bulbasaur", "Charmander", "Squirtle", "Pikachu"];
console.log(arr[3]);
// "Pikachu"
const set = new Set(arr);
console.log(set[3]);
// undefined
Set 物件也是一個可以迭代的物件,和 Map 一樣,它也擁有entries
, keys
, values
的方法,不過由於 Set 沒有 key 值,所以key
和values
所產生的迭代物件是一樣的。使用上一樣,可以用for..of
迴圈,也可以用next
分段回傳資料。
set.values();
// { "Bulbasaur", "Charmander", "Squirtle", "Pikachu" }
set.keys();
// { "Bulbasaur", "Charmander", "Squirtle", "Pikachu" }
set.entries();
// {["Bulbasaur", "Bulbasaur"], ["Charmander", "Charmander"], ["Squirtle", "Squirtle"], ["Pikachu", "Pikachu"]}
最特別的是他不會存重複值,還有搜尋跟新增刪除都比 Array 快,但要存取時 Array 存取是 O(1) 還是最快的
但要存取時 Array 存取是 O(1) 還是最快的
這句話可以說明一下嗎?
不過Set沒有 index number,要怎麼取值啊?
原來你有寫過了,哈哈,自己的文章寫不完,都來不及觀摩別人的作品。
我懂我懂 真的是鐵人賽每天都自趕工